﻿//一、结构

//namespace cs_learn_09
//{
//    class CSimple
//    {
//        public int X;
//        public int Y;
//    }
//    struct Simple
//    {
//        public int X;
//        public int Y;
//        // 不允许初始化
//        public int Z = 0;
//        public Simple(int a,int b)
//        {
//            X = a;
//            Y = b;
//        }
//    }
//    internal class Program
//    {
//        static void Main(string[] args)
//        {
//            //CSimple cs1 = new CSimple(), cs2 = null;
//            //Simple ss1 = new Simple(),ss2 = new Simple();
//            //cs1.X = ss1.X = 5;
//            //cs1.Y = ss1.Y = 10;
//            //cs2 = cs1;
//            //ss2 = ss1;
//            //Simple s1 = new Simple();
//            //Simple s2 = new Simple(5,10);
//            //Console.WriteLine($"{s1.X}{s1.Y}");
//            //Console.WriteLine($"{s2.X}{s2.Y}");

//            //不使用new运算
//            Simple s1, s2;
//            s1.X = 1;
//            s1.Y = 2;
//            Console.WriteLine($"{s1.X},{s1.Y}");
//        }
//    }
//}


//二、枚举
//using System;

//namespace cs_learn_09
//{
//    enum Job
//    {
//        Warrior,  // 战士
//        Mage,     // 法师
//        Priest,   // 牧师
//        Rogue     // 盗贼
//    }
//    class Program
//    {
//        static void Main(string[] args)
//        {
//            bool target  = true;
//            while (target)
//            {
//                Console.WriteLine($"请选择你的职业：\n\t1.战士\n\t2.法师\n\t3.牧师\n\t4.盗贼\n\t");
//                string input = Console.ReadLine();
//                switch (input)
//                {
//                    case "1":
//                        Console.WriteLine("你选择了战士");
//                        target = false;
//                        break;
//                    case "2":
//                        Console.WriteLine("你选择了法师");
//                        target = false;
//                        break;
//                    case "3":
//                        Console.WriteLine("你选择了牧师");
//                        target = false;
//                        break;
//                    case "4":
//                        Console.WriteLine("你选择了盗贼");
//                        target = false;
//                        break;
//                    default:
//                        Console.WriteLine("选择错误,请重新选择");
//                        break;
//                }
//            }
//        }
//    }
//}


//三、数组
//    数组的声明与实例化
using System.Runtime.InteropServices;

namespace cs_learn_09
{
    class Program
    {
        static void Main()
        {
            // 一维数组
            //int[] arr1 = new int[4];
            //// Console.WriteLine(arr1);
            //for (int i = 0; i < arr1.Length; i++)
            //{
            //    Console.WriteLine(arr1[i]);
            //}

            // 二维数组
            //int[,] arr2 = new int[2, 3];
            //for (int i = 0; i < 2; i++) 
            //{
            //    for(int j = 0; j < 3; j++)
            //    {
            //        Console.Write($"\t{arr2[i, j]}");
            //    }
            //    Console.WriteLine($"\n");
            //}

            // 显式初始化一维数组
            //int[] arr3 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
            //for (int i = 0; i < arr3.Length; i++) 
            //{ 
            //    Console.WriteLine(arr3[i]);
            //}
            //Console.WriteLine();
            //int[] arr4 = { 1, 2, 3, };
            //for (int i = 0; i < arr4.Length; i++)
            //{
            //    Console.WriteLine(arr4[i]);
            //}

            // 交错数组
            //int[][] Arr = new int[3][];
            //Arr[0] = new int[3];
            //Arr[1] = new int[] { 1,3,5,5,6,7,10};
            //Arr[2] = new int[] { 80, 90, 30, 55 };
            //for(int i = 0; i < Arr[0].Length; i++)
            //{
            //    Console.WriteLine(Arr[0][i]);
            //}
            //for (int i = 0; i < Arr[1].Length; i++)
            //{
            //    Console.WriteLine(Arr[1][i]);
            //}
            //for (int i = 0; i < Arr[2].Length; i++)
            //{
            //    Console.WriteLine(Arr[2][i]);
            //}

            //int[][,] Arr;
            //Arr = new int[3][,];

            //Arr[0] = new int[,] { { 10, 20 }, { 20, 30 } };
            //Arr[1] = new int[,] { { 30, 40, 50 },{ 20, 20,30} };
            //Arr[2] = new int[,] { { 30, 20, 1, 2 }, { 1, 2, 4, 5 } };

            // foreach语句
            //int[] Arr = { 1, 2, 3, 4, 10 };
            //foreach(int i in Arr)
            //{
            //    Console.WriteLine(i);
            //}
            //string[] Arr2 = { "你好", "摩西摩西", "hellow" };
            //foreach(string s in Arr2)
            //{
            //    Console.WriteLine(s);
            //}

            //MyClass[] mcArr = new MyClass[4];
            //for(int i = 0; i < mcArr.Length; i++)
            //{
            //    mcArr[i] = new MyClass();
            //    mcArr[i].MyField = i;
            //}
            //foreach(MyClass item in mcArr)
            //{
            //    item.MyField += 10;
            //}
            //foreach(MyClass item in mcArr)
            //{
            //    Console.WriteLine(item.MyField);
            //}

            //int[][] arr1 = new int[2][];
            //arr1[0] = new int[] { 1, 3, 2, 4, 5 };
            //arr1[1] = new int[] {2,3,4,5,9,10};

            //foreach (int[] array in arr1)
            //{
            //    Console.WriteLine(array);
            //    foreach(int item in array)
            //    {
            //        Console.WriteLine(item);
            //    }
            //}

            //int[] Arr1 = { 1, 2, 3, 4, 5 };
            //int[] Arr2 = (int[])Arr1.Clone();

            //for(int i = 0; i < Arr2.Length; i++)
            //{
            //    Arr2[i] = Arr2[i] * 10;
            //}
            //foreach (int i in Arr2)
            //{
            //    Console.WriteLine(i);
            //}
            //foreach (int i in Arr1)
            //{
            //    Console.WriteLine(i);
            //}

            A[] Arr1 = new A[3] { new A(), new A(), new A() };
            A[] Arr2 = (A[])Arr1.Clone();

            Arr2[0].Value = 1;
            Arr2[1].Value = 2;
            Arr2[2].Value = 3;

            foreach (A a in Arr2) { 
                Console.WriteLine(a.Value);
            }
            foreach (A a in Arr1)
            {
                Console.WriteLine(a.Value);
            }
        }
    }
    //class MyClass
    //{
    //    public int MyField = 0;
    //}
    class A 
    {
        public int Value = 5;
    }
}